.

iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
Kubernetes

Kubernetes三十天就上手系列 第 13

Day 13- Kubernetes 中的 Volume 與 PersistentVolume

  • 分享至 

  • xImage
  •  

Kubernetes 中的 Volume 與 PersistentVolume

在 Kubernetes 中,持久化儲存是保證應用資料不丟失的關鍵。這篇文章將帶你了解 Kubernetes 中的 Volume、PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 這些核心概念,以及如何設定和管理它們。

Volume 的基本概念

Volume 的作用

Volume 的設計目的是解決容器臨時儲存的問題,提供資料持久化支援,即使容器重啟,資料也不會丟失。除此之外,Volume 還允許在同一個 Pod 中的多個容器之間共享資料。

Volume 的類型

Kubernetes 支援多種 Volume 類型,每種都有不同的用途:

  • emptyDir: 當 Pod 被創建時初始化一個空目錄,Pod 被刪除後資料會隨之清除。
  • hostPath: 將節點的某個目錄掛載到 Pod 中,適合與主機共享資料。
  • nfs: 支援網路檔案系統 (NFS) 的掛載。
  • configMapsecret: 用於存放設定資料或敏感資訊。

Volume 在 Pod 中的運作示意

下圖展示了在 Kubernetes 中,Pod 中的容器如何透過掛載 Volume 來實現資料共享與持久化:

Volume 示意圖

圖解說明:Pod 中的容器通過將 /var/dir 這個路徑掛載到指定的 Volume 上,實現資料的持久化儲存和容器間資料的共享。這種 Volume 可以是多種形式,如 emptyDirhostPath 等,適合不同場景的需求。這樣即使容器重啟,Volume 中的資料依然保持不變。

Volume 的使用範例

以下是一個使用 emptyDir Volume 的範例:

apiVersion: v1
kind: Pod
metadata:
  name: emptydir-pod
spec:
  containers:
  - name: busybox
    image: busybox
    command: [ "sh", "-c", "sleep 3600" ]
    volumeMounts:
    - name: shared-storage
      mountPath: /usr/share/busybox
  volumes:
  - name: shared-storage
    emptyDir: {}

這個範例展示了當 Pod 被刪除時,emptyDir 的資料將一併清除。這類 Volume 適合於需要臨時儲存資料的場景。

PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)

在需要持久化儲存的情況下,Kubernetes 提供了 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 來滿足需求。

PersistentVolume (PV)

  • PV 是由管理員預先設定的一塊儲存資源,它獨立於 Pod 存在,擁有自己的生命週期,並可以在 Cluster 中多次使用。

PersistentVolumeClaim (PVC)

  • PVC 是對 PV 的儲存資源請求,通常由應用開發者定義。用戶可以根據需求請求不同的儲存大小和存取模式。

PV 與 PVC 的架構示意

下圖展示了如何透過 PVC 綁定 PV 並在 Pod 中使用:

PV 與 PVC 示意圖

圖解說明:Pod 中的容器透過掛載 Volume 來存取資料,但這次使用的是一個通過 PVC 綁定的 PV。PVC 作為用戶對儲存資源的請求,當成功綁定 PV 後,Pod 就能夠持久化地使用這些儲存資源。這種架構能夠確保資料即使在 Pod 被刪除或重新部署後依然存在,適合長期保存資料的應用場景。

創建 PersistentVolume 和 PersistentVolumeClaim 的範例

1. 創建 PersistentVolume

以下是一個 NFS PersistentVolume 的範例:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /mnt/data
    server: nfs-server.example.com

使用指令創建 PV:

kubectl apply -f nfs-pv.yaml

2. 創建 PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

創建 PVC:

kubectl apply -f nfs-pvc.yaml

3. 在 Pod 中使用 PersistentVolumeClaim

apiVersion: v1
kind: Pod
metadata:
  name: pvc-pod
spec:
  containers:
  - name: busybox
    image: busybox
    command: [ "sh", "-c", "sleep 3600" ]
    volumeMounts:
    - name: nfs-storage
      mountPath: /usr/share/busybox
  volumes:
  - name: nfs-storage
    persistentVolumeClaim:
      claimName: nfs-pvc

這個範例展示了如何在 Pod 中掛載 PVC,以便持久化應用資料。

管理 PersistentVolume 和 PersistentVolumeClaim

查看 PersistentVolume 和 PersistentVolumeClaim

可以使用以下指令查看現有的 PV 和 PVC:

kubectl get pv
kubectl get pvc

更新 PersistentVolume 和 PersistentVolumeClaim

如果需要修改 PV 或 PVC,可以使用以下指令進行編輯:

kubectl edit pv nfs-pv
kubectl edit pvc nfs-pvc

總結

通過這篇文章,我們了解了 Kubernetes 中 Volume、PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 的基本概念和使用方式,並學會了如何創建和管理這些儲存資源。這些知識不僅幫助我們在 Kubernetes 中更好地處理資料持久化需求,還能提升應用的可用性。

在接下來的學習中,我們將深入探討 Storage Class,學習如何在 Kubernetes 中進行動態儲存設定。這些內容將使你更全面地掌握 Kubernetes 的儲存策略,進一步提升操作能力。


上一篇
Day 12- 使用 Secrets 管理敏感資訊
下一篇
Day 14- Storage Classes 動態設定儲存
系列文
Kubernetes三十天就上手30
.
圖片
  直播研討會

尚未有邦友留言

立即登入留言